﻿using UnityEngine;
using System.Collections;

public class CameraController : MonoBehaviour {

	public float perspectiveZoomSpeed = 0.05f;        // The rate of change of the field of view in perspective mode.
	public float orthoZoomSpeed = 0.05f;        // The rate of change of the orthographic size in orthographic mode.
	public float panSpeed = 0.05f;
	public float maxOrthoZoom = 2.0f;
	public float minOrthoZoom = 10.0f;


	public Vector2 maxPanClamp;
	public Vector2 minPanClamp;

	public GameController gameController;

	void Update () {
		if (!gameController.draggingLetter){
			PinchZoom();
			PanCamera();
		}
	}

	void PanCamera(){
		
		if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved) {
			Vector2 touchDeltaPosition = Input.GetTouch(0).deltaPosition;
			transform.Translate(-touchDeltaPosition.x * panSpeed, -touchDeltaPosition.y * panSpeed, 0);
			transform.position = new Vector3(
				Mathf.Clamp(transform.position.x, minPanClamp.x, maxPanClamp.x),
				Mathf.Clamp(transform.position.y, minPanClamp.y, maxPanClamp.y),
				transform.position.z
				);
			
		}
	}


	void PinchZoom(){
		// If there are two touches on the device...
		if (Input.touchCount == 2)
		{
			// Store both touches.
			Touch touchZero = Input.GetTouch(0);
			Touch touchOne = Input.GetTouch(1);
			
			// Find the position in the previous frame of each touch.
			Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition;
			Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition;
			
			// Find the magnitude of the vector (the distance) between the touches in each frame.
			float prevTouchDeltaMag = (touchZeroPrevPos - touchOnePrevPos).magnitude;
			float touchDeltaMag = (touchZero.position - touchOne.position).magnitude;
			
			// Find the difference in the distances between each frame.
			float deltaMagnitudeDiff = prevTouchDeltaMag - touchDeltaMag;
			
			// If the camera is orthographic...
			if (camera.isOrthoGraphic)
			{
				// ... change the orthographic size based on the change in distance between the touches.
				camera.orthographicSize += deltaMagnitudeDiff * orthoZoomSpeed;
				
				// Make sure the orthographic size never drops below zero.
				camera.orthographicSize = Mathf.Max(camera.orthographicSize, maxOrthoZoom);
				camera.orthographicSize = Mathf.Min(camera.orthographicSize, minOrthoZoom);
			}
			else
			{
				// Otherwise change the field of view based on the change in distance between the touches.
				camera.fieldOfView += deltaMagnitudeDiff * perspectiveZoomSpeed;
				
				// Clamp the field of view to make sure it's between 0 and 180.
				camera.fieldOfView = Mathf.Clamp(camera.fieldOfView, 0.1f, 179.9f);
			}
		}
	}
}




